#include "Convert.h"
#include "TextReader.h"

namespace Convert
{

	const tchar* bytesTable[] = 
	{
		_RBT("00"),_RBT("01"),_RBT("02"),_RBT("03"),_RBT("04"),_RBT("05"),_RBT("06"),_RBT("07"),_RBT("08"),_RBT("09"),_RBT("0A"),_RBT("0B"),_RBT("0C"),_RBT("0D"),_RBT("0E"),_RBT("0F"),
		_RBT("10"),_RBT("11"),_RBT("12"),_RBT("13"),_RBT("14"),_RBT("15"),_RBT("16"),_RBT("17"),_RBT("18"),_RBT("19"),_RBT("1A"),_RBT("1B"),_RBT("1C"),_RBT("1D"),_RBT("1E"),_RBT("1F"),
		_RBT("20"),_RBT("21"),_RBT("22"),_RBT("23"),_RBT("24"),_RBT("25"),_RBT("26"),_RBT("27"),_RBT("28"),_RBT("29"),_RBT("2A"),_RBT("2B"),_RBT("2C"),_RBT("2D"),_RBT("2E"),_RBT("2F"),
		_RBT("30"),_RBT("31"),_RBT("32"),_RBT("33"),_RBT("34"),_RBT("35"),_RBT("36"),_RBT("37"),_RBT("38"),_RBT("39"),_RBT("3A"),_RBT("3B"),_RBT("3C"),_RBT("3D"),_RBT("3E"),_RBT("3F"),
		_RBT("40"),_RBT("41"),_RBT("42"),_RBT("43"),_RBT("44"),_RBT("45"),_RBT("46"),_RBT("47"),_RBT("48"),_RBT("49"),_RBT("4A"),_RBT("4B"),_RBT("4C"),_RBT("4D"),_RBT("4E"),_RBT("4F"),
		_RBT("50"),_RBT("51"),_RBT("52"),_RBT("53"),_RBT("54"),_RBT("55"),_RBT("56"),_RBT("57"),_RBT("58"),_RBT("59"),_RBT("5A"),_RBT("5B"),_RBT("5C"),_RBT("5D"),_RBT("5E"),_RBT("5F"),
		_RBT("60"),_RBT("61"),_RBT("62"),_RBT("63"),_RBT("64"),_RBT("65"),_RBT("66"),_RBT("67"),_RBT("68"),_RBT("69"),_RBT("6A"),_RBT("6B"),_RBT("6C"),_RBT("6D"),_RBT("6E"),_RBT("6F"),
		_RBT("70"),_RBT("71"),_RBT("72"),_RBT("73"),_RBT("74"),_RBT("75"),_RBT("76"),_RBT("77"),_RBT("78"),_RBT("79"),_RBT("7A"),_RBT("7B"),_RBT("7C"),_RBT("7D"),_RBT("7E"),_RBT("7F"),
		_RBT("80"),_RBT("81"),_RBT("82"),_RBT("83"),_RBT("84"),_RBT("85"),_RBT("86"),_RBT("87"),_RBT("88"),_RBT("89"),_RBT("8A"),_RBT("8B"),_RBT("8C"),_RBT("8D"),_RBT("8E"),_RBT("8F"),
		_RBT("90"),_RBT("91"),_RBT("92"),_RBT("93"),_RBT("94"),_RBT("95"),_RBT("96"),_RBT("97"),_RBT("98"),_RBT("99"),_RBT("9A"),_RBT("9B"),_RBT("9C"),_RBT("9D"),_RBT("9E"),_RBT("9F"),
		_RBT("A0"),_RBT("A1"),_RBT("A2"),_RBT("A3"),_RBT("A4"),_RBT("A5"),_RBT("A6"),_RBT("A7"),_RBT("A8"),_RBT("A9"),_RBT("AA"),_RBT("AB"),_RBT("AC"),_RBT("AD"),_RBT("AE"),_RBT("AF"),
		_RBT("B0"),_RBT("B1"),_RBT("B2"),_RBT("B3"),_RBT("B4"),_RBT("B5"),_RBT("B6"),_RBT("B7"),_RBT("B8"),_RBT("B9"),_RBT("BA"),_RBT("BB"),_RBT("BC"),_RBT("BD"),_RBT("BE"),_RBT("BF"),
		_RBT("C0"),_RBT("C1"),_RBT("C2"),_RBT("C3"),_RBT("C4"),_RBT("C5"),_RBT("C6"),_RBT("C7"),_RBT("C8"),_RBT("C9"),_RBT("CA"),_RBT("CB"),_RBT("CC"),_RBT("CD"),_RBT("CE"),_RBT("CF"),
		_RBT("D0"),_RBT("D1"),_RBT("D2"),_RBT("D3"),_RBT("D4"),_RBT("D5"),_RBT("D6"),_RBT("D7"),_RBT("D8"),_RBT("D9"),_RBT("DA"),_RBT("DB"),_RBT("DC"),_RBT("DD"),_RBT("DE"),_RBT("DF"),
		_RBT("E0"),_RBT("E1"),_RBT("E2"),_RBT("E3"),_RBT("E4"),_RBT("E5"),_RBT("E6"),_RBT("E7"),_RBT("E8"),_RBT("E9"),_RBT("EA"),_RBT("EB"),_RBT("EC"),_RBT("ED"),_RBT("EE"),_RBT("EF"),
		_RBT("F0"),_RBT("F1"),_RBT("F2"),_RBT("F3"),_RBT("F4"),_RBT("F5"),_RBT("F6"),_RBT("F7"),_RBT("F8"),_RBT("F9"),_RBT("FA"),_RBT("FB"),_RBT("FC"),_RBT("FD"),_RBT("FE"),_RBT("FF")
	};

	int32 ToString( const byte* source , uint32 count , string& value )
	{
		uint64 maxCount = count * 2;

		if( maxCount > value.max_size() )
			return E_CONVERT_MAXSIZE;

		value.reserve(count*2);

		for (uint32 ix=0;ix<count;++ix)
		{
			value.append(bytesTable[source[ix]],2);
		}

		return R_SUCCEED;
	}
}
